home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C / Applications / Tcl-Tk 8.0 / Pre-installed version / MoreFiles 1.4.3 / Sources / MoreFiles.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-08-24  |  15.9 KB  |  590 lines  |  [TEXT/MPS ]

  1. /*
  2. **    Apple Macintosh Developer Technical Support
  3. **
  4. **    The long lost high-level and FSSpec File Manager functions.
  5. **
  6. **    by Jim Luther, Apple Developer Technical Support Emeritus
  7. **
  8. **    File:        MoreFiles.c
  9. **
  10. **    Copyright © 1992-1996 Apple Computer, Inc.
  11. **    All rights reserved.
  12. **
  13. **    You may incorporate this sample code into your applications without
  14. **    restriction, though the sample code has been provided "AS IS" and the
  15. **    responsibility for its operation is 100% yours.  However, what you are
  16. **    not permitted to do is to redistribute the source as "DSC Sample Code"
  17. **    after having made changes. If you're going to re-distribute the source,
  18. **    we require that you make it clear in the source that the code was
  19. **    descended from Apple Sample Code, but that you've made changes.
  20. */
  21.  
  22. #include <Types.h>
  23. #include <Errors.h>
  24. #include <Files.h>
  25.  
  26. #define    __COMPILINGMOREFILES
  27.  
  28. #include "MoreFiles.h"
  29. #include "MoreFilesExtras.h"
  30.  
  31. /*****************************************************************************/
  32.  
  33. pascal    OSErr    HGetVolParms(StringPtr volName,
  34.                              short vRefNum,
  35.                              GetVolParmsInfoBuffer *volParmsInfo,
  36.                              long *infoSize)
  37. {
  38.     HParamBlockRec pb;
  39.     OSErr error;
  40.  
  41.     pb.ioParam.ioNamePtr = volName;
  42.     pb.ioParam.ioVRefNum = vRefNum;
  43.     pb.ioParam.ioBuffer = (Ptr)volParmsInfo;
  44.     pb.ioParam.ioReqCount = *infoSize;
  45.     error = PBHGetVolParmsSync(&pb);
  46.     *infoSize = pb.ioParam.ioActCount;
  47.     return ( error );
  48. }
  49.  
  50. /*****************************************************************************/
  51.  
  52. pascal    OSErr    HCreateMinimum(short vRefNum,
  53.                                long dirID,
  54.                                ConstStr255Param fileName)
  55. {
  56.     HParamBlockRec pb;
  57.  
  58.     pb.fileParam.ioNamePtr = (StringPtr)fileName;
  59.     pb.fileParam.ioVRefNum = vRefNum;
  60.     pb.ioParam.ioVersNum = 0;
  61.     pb.fileParam.ioDirID = dirID;
  62.     return ( PBHCreateSync(&pb) );
  63. }
  64.  
  65. /*****************************************************************************/
  66.  
  67. pascal    OSErr    FSpCreateMinimum(const FSSpec *spec)
  68. {
  69.     return ( HCreateMinimum(spec->vRefNum, spec->parID, spec->name) );
  70. }
  71.  
  72. /*****************************************************************************/
  73.  
  74. pascal    OSErr    ExchangeFiles(short vRefNum,
  75.                               long srcDirID,
  76.                               ConstStr255Param srcName,
  77.                               long dstDirID,
  78.                               ConstStr255Param dstName)
  79. {
  80.     HParamBlockRec pb;
  81.  
  82.     pb.fidParam.ioVRefNum = vRefNum;
  83.     pb.fidParam.ioSrcDirID = srcDirID;
  84.     pb.fidParam.ioNamePtr = (StringPtr)srcName;
  85.     pb.fidParam.ioDestDirID = dstDirID;
  86.     pb.fidParam.ioDestNamePtr = (StringPtr)dstName;
  87.     return ( PBExchangeFilesSync(&pb) );
  88. }
  89.  
  90. /*****************************************************************************/
  91.  
  92. pascal    OSErr    ResolveFileIDRef(StringPtr volName,
  93.                                  short vRefNum,
  94.                                  long fileID,
  95.                                  long *parID,
  96.                                  StringPtr fileName)
  97. {
  98.     HParamBlockRec pb;
  99.     OSErr error;
  100.     Str255 tempStr;
  101.     
  102.     tempStr[0] = 0;
  103.     if ( volName != NULL )
  104.         BlockMoveData(volName, tempStr, volName[0] + 1);
  105.     pb.fidParam.ioNamePtr = (StringPtr)tempStr;
  106.     pb.fidParam.ioVRefNum = vRefNum;
  107.     pb.fidParam.ioFileID = fileID;
  108.     error = PBResolveFileIDRefSync(&pb);
  109.     *parID = pb.fidParam.ioSrcDirID;
  110.     if ( fileName != NULL )
  111.         BlockMoveData(tempStr, fileName, tempStr[0] + 1);
  112.     return ( error );
  113. }
  114.  
  115. /*****************************************************************************/
  116.  
  117. pascal    OSErr    FSpResolveFileIDRef(StringPtr volName,
  118.                                     short vRefNum,
  119.                                     long fileID,
  120.                                     FSSpecPtr spec)
  121. {
  122.     OSErr    error;
  123.     
  124.     error = DetermineVRefNum(volName, vRefNum, &(spec->vRefNum));
  125.     if ( error == noErr )
  126.     {
  127.         error = ResolveFileIDRef(volName, vRefNum, fileID, &(spec->parID), spec->name);
  128.     }
  129.     return ( error );
  130. }
  131.  
  132. /*****************************************************************************/
  133.  
  134. pascal    OSErr    CreateFileIDRef(short vRefNum,
  135.                                 long parID,
  136.                                 ConstStr255Param fileName,
  137.                                 long *fileID)
  138. {
  139.     HParamBlockRec pb;
  140.     OSErr error;
  141.  
  142.     pb.fidParam.ioNamePtr = (StringPtr)fileName;
  143.     pb.fidParam.ioVRefNum = vRefNum;
  144.     pb.fidParam.ioSrcDirID = parID;
  145.     error = PBCreateFileIDRefSync(&pb);
  146.     *fileID = pb.fidParam.ioFileID;
  147.     return ( error );
  148. }
  149.  
  150. /*****************************************************************************/
  151.  
  152. pascal    OSErr    FSpCreateFileIDRef(const FSSpec *spec,
  153.                                    long *fileID)
  154. {
  155.     return ( CreateFileIDRef(spec->vRefNum, spec->parID, spec->name, fileID) );
  156. }
  157.  
  158. /*****************************************************************************/
  159.  
  160. pascal    OSErr    DeleteFileIDRef(StringPtr volName,
  161.                                 short vRefNum,
  162.                                 long fileID)
  163. {
  164.     HParamBlockRec pb;
  165.  
  166.     pb.fidParam.ioNamePtr = volName;
  167.     pb.fidParam.ioVRefNum = vRefNum;
  168.     pb.fidParam.ioFileID = fileID;
  169.     return ( PBDeleteFileIDRefSync(&pb) );
  170. }
  171.  
  172. /*****************************************************************************/
  173.  
  174. pascal    OSErr    FlushFile(short refNum)
  175. {
  176.     ParamBlockRec pb;
  177.  
  178.     pb.ioParam.ioRefNum = refNum;
  179.     return ( PBFlushFileSync(&pb) );
  180. }
  181.  
  182. /*****************************************************************************/
  183.  
  184. pascal    OSErr    LockRange(short refNum,
  185.                           long rangeLength,
  186.                           long rangeStart)
  187. {
  188.     ParamBlockRec pb;
  189.  
  190.     pb.ioParam.ioRefNum = refNum;
  191.     pb.ioParam.ioReqCount = rangeLength;
  192.     pb.ioParam.ioPosMode = fsFromStart;
  193.     pb.ioParam.ioPosOffset = rangeStart;
  194.     return ( PBLockRangeSync(&pb) );
  195. }
  196.  
  197. /*****************************************************************************/
  198.  
  199. pascal    OSErr    UnlockRange(short refNum,
  200.                             long rangeLength,
  201.                             long rangeStart)
  202. {
  203.     ParamBlockRec pb;
  204.  
  205.     pb.ioParam.ioRefNum = refNum;
  206.     pb.ioParam.ioReqCount = rangeLength;
  207.     pb.ioParam.ioPosMode = fsFromStart;
  208.     pb.ioParam.ioPosOffset = rangeStart;
  209.     return ( PBUnlockRangeSync(&pb) );
  210. }
  211.  
  212. /*****************************************************************************/
  213.  
  214. pascal    OSErr    GetForeignPrivs(short vRefNum,
  215.                                 long dirID,
  216.                                 StringPtr name,
  217.                                 void *foreignPrivBuffer,
  218.                                 long *foreignPrivSize,
  219.                                 long *foreignPrivInfo1,
  220.                                 long *foreignPrivInfo2,
  221.                                 long *foreignPrivInfo3,
  222.                                 long *foreignPrivInfo4)
  223. {
  224.     HParamBlockRec pb;
  225.     OSErr error;
  226.  
  227.     pb.foreignPrivParam.ioNamePtr = name;
  228.     pb.foreignPrivParam.ioVRefNum = vRefNum;
  229.     pb.foreignPrivParam.ioForeignPrivDirID = dirID;    
  230.     pb.foreignPrivParam.ioForeignPrivBuffer = (Ptr)foreignPrivBuffer;
  231.     pb.foreignPrivParam.ioForeignPrivReqCount = *foreignPrivSize;
  232.     error = PBGetForeignPrivsSync(&pb);
  233.     *foreignPrivSize = pb.foreignPrivParam.ioForeignPrivActCount;
  234.     *foreignPrivInfo1 = pb.foreignPrivParam.ioForeignPrivInfo1;
  235.     *foreignPrivInfo2 = pb.foreignPrivParam.ioForeignPrivInfo2;
  236.     *foreignPrivInfo3 = pb.foreignPrivParam.ioForeignPrivInfo3;
  237.     *foreignPrivInfo4 = pb.foreignPrivParam.ioForeignPrivInfo4;
  238.     return ( error );
  239. }
  240.  
  241. /*****************************************************************************/
  242.  
  243. pascal    OSErr    FSpGetForeignPrivs(const FSSpec *spec,
  244.                                    void *foreignPrivBuffer,
  245.                                    long *foreignPrivSize,
  246.                                    long *foreignPrivInfo1,
  247.                                    long *foreignPrivInfo2,
  248.                                    long *foreignPrivInfo3,
  249.                                    long *foreignPrivInfo4)
  250. {
  251.     return ( GetForeignPrivs(spec->vRefNum, spec->parID, (StringPtr)spec->name,
  252.                              foreignPrivBuffer, foreignPrivSize,
  253.                              foreignPrivInfo1, foreignPrivInfo2,
  254.                              foreignPrivInfo3, foreignPrivInfo4) );
  255. }
  256.  
  257. /*****************************************************************************/
  258.  
  259. pascal    OSErr    SetForeignPrivs(short vRefNum,
  260.                                 long dirID,
  261.                                 StringPtr name,
  262.                                 void *foreignPrivBuffer,
  263.                                 long *foreignPrivSize,
  264.                                 long foreignPrivInfo1,
  265.                                 long foreignPrivInfo2,
  266.                                 long foreignPrivInfo3,
  267.                                 long foreignPrivInfo4)
  268. {
  269.     HParamBlockRec pb;
  270.     OSErr error;
  271.  
  272.     pb.foreignPrivParam.ioNamePtr = name;
  273.     pb.foreignPrivParam.ioVRefNum = vRefNum;
  274.     pb.foreignPrivParam.ioForeignPrivDirID = dirID;    
  275.     pb.foreignPrivParam.ioForeignPrivBuffer = (Ptr)foreignPrivBuffer;
  276.     pb.foreignPrivParam.ioForeignPrivReqCount = *foreignPrivSize;
  277.     pb.foreignPrivParam.ioForeignPrivInfo1 = foreignPrivInfo1;
  278.     pb.foreignPrivParam.ioForeignPrivInfo2 = foreignPrivInfo2;
  279.     pb.foreignPrivParam.ioForeignPrivInfo3 = foreignPrivInfo3;
  280.     pb.foreignPrivParam.ioForeignPrivInfo4 = foreignPrivInfo4;
  281.     error = PBSetForeignPrivsSync(&pb);
  282.     *foreignPrivSize = pb.foreignPrivParam.ioForeignPrivActCount;
  283.     return ( error );
  284. }
  285.  
  286. /*****************************************************************************/
  287.  
  288. pascal    OSErr    FSpSetForeignPrivs(const FSSpec *spec,
  289.                                    void *foreignPrivBuffer,
  290.                                    long *foreignPrivSize,
  291.                                    long foreignPrivInfo1,
  292.                                    long foreignPrivInfo2,
  293.                                    long foreignPrivInfo3,
  294.                                    long foreignPrivInfo4)
  295. {
  296.     return ( SetForeignPrivs(spec->vRefNum, spec->parID, (StringPtr)spec->name,
  297.                              foreignPrivBuffer, foreignPrivSize,
  298.                              foreignPrivInfo1, foreignPrivInfo2,
  299.                              foreignPrivInfo3, foreignPrivInfo4) );
  300. }
  301.  
  302. /*****************************************************************************/
  303.  
  304. pascal    OSErr    HGetLogInInfo(StringPtr volName,
  305.                               short vRefNum,
  306.                               short *loginMethod,
  307.                               StringPtr userName)
  308. {
  309.     HParamBlockRec pb;
  310.     OSErr error;
  311.  
  312.     pb.objParam.ioNamePtr = volName;
  313.     pb.objParam.ioVRefNum = vRefNum;
  314.     pb.objParam.ioObjNamePtr = userName;
  315.     error = PBHGetLogInInfoSync(&pb);
  316.     *loginMethod = pb.objParam.ioObjType;
  317.     return ( error );
  318. }
  319.  
  320. /*****************************************************************************/
  321.  
  322. pascal    OSErr    HGetDirAccess(short vRefNum,
  323.                               long dirID,
  324.                               StringPtr name,
  325.                               long *ownerID,
  326.                               long *groupID,
  327.                               long *accessRights)
  328. {
  329.     HParamBlockRec pb;
  330.     OSErr error;
  331.  
  332.     pb.accessParam.ioNamePtr = name;
  333.     pb.accessParam.ioVRefNum = vRefNum;
  334.     pb.fileParam.ioDirID = dirID;
  335.     error = PBHGetDirAccessSync(&pb);
  336.     *ownerID = pb.accessParam.ioACOwnerID;
  337.     *groupID = pb.accessParam.ioACGroupID;
  338.     *accessRights = pb.accessParam.ioACAccess;
  339.     return ( error );
  340. }
  341.  
  342. /*****************************************************************************/
  343.  
  344. pascal    OSErr    FSpGetDirAccess(const FSSpec *spec,
  345.                                 long *ownerID,
  346.                                 long *groupID,
  347.                                 long *accessRights)
  348. {
  349.     return ( HGetDirAccess(spec->vRefNum, spec->parID, (StringPtr)spec->name,
  350.                            ownerID, groupID, accessRights) );
  351. }
  352.  
  353. /*****************************************************************************/
  354.  
  355. pascal    OSErr    HSetDirAccess(short vRefNum,
  356.                               long dirID,
  357.                               StringPtr name,
  358.                               long ownerID,
  359.                               long groupID,
  360.                               long accessRights)
  361. {
  362.     HParamBlockRec pb;
  363.  
  364.     pb.accessParam.ioNamePtr = name;
  365.     pb.accessParam.ioVRefNum = vRefNum;
  366.     pb.fileParam.ioDirID = dirID;
  367.     pb.accessParam.ioACOwnerID = ownerID;
  368.     pb.accessParam.ioACGroupID = groupID;
  369.     pb.accessParam.ioACAccess = accessRights;
  370.     return ( PBHSetDirAccessSync(&pb) );
  371. }
  372.  
  373. /*****************************************************************************/
  374.  
  375. pascal    OSErr    FSpSetDirAccess(const FSSpec *spec,
  376.                                 long ownerID,
  377.                                 long groupID,
  378.                                 long accessRights)
  379. {
  380.     return ( HSetDirAccess(spec->vRefNum, spec->parID, (StringPtr)spec->name,
  381.                            ownerID, groupID, accessRights) );
  382. }
  383.  
  384. /*****************************************************************************/
  385.  
  386. pascal    OSErr    HMapID(StringPtr volName,
  387.                        short vRefNum,
  388.                        long ugID,
  389.                        short objType,
  390.                        StringPtr name)
  391. {
  392.     HParamBlockRec pb;
  393.  
  394.     pb.objParam.ioNamePtr = volName;
  395.     pb.objParam.ioVRefNum = vRefNum;
  396.     pb.objParam.ioObjType = objType;
  397.     pb.objParam.ioObjNamePtr = name;
  398.     pb.objParam.ioObjID = ugID;
  399.     return ( PBHMapIDSync(&pb) );
  400. }
  401.  
  402. /*****************************************************************************/
  403.  
  404. pascal    OSErr    HMapName(StringPtr volName,
  405.                          short vRefNum,
  406.                          ConstStr255Param name,
  407.                          short objType,
  408.                          long *ugID)
  409. {
  410.     HParamBlockRec pb;
  411.     OSErr error;
  412.  
  413.     pb.objParam.ioNamePtr = volName;
  414.     pb.objParam.ioVRefNum = vRefNum;
  415.     pb.objParam.ioObjType = objType;
  416.     pb.objParam.ioObjNamePtr = (StringPtr)name;
  417.     error = PBHMapNameSync(&pb);
  418.     *ugID = pb.objParam.ioObjID;
  419.     return ( error );
  420. }
  421.  
  422. /*****************************************************************************/
  423.  
  424. pascal    OSErr    HCopyFile(short srcVRefNum,
  425.                           long srcDirID,
  426.                           ConstStr255Param srcName,
  427.                           short dstVRefNum,
  428.                           long dstDirID,
  429.                           StringPtr dstPathname,
  430.                           StringPtr copyName)
  431. {
  432.     HParamBlockRec pb;
  433.  
  434.     pb.copyParam.ioVRefNum = srcVRefNum;
  435.     pb.copyParam.ioDirID = srcDirID;
  436.     pb.copyParam.ioNamePtr = (StringPtr)srcName;
  437.     pb.copyParam.ioDstVRefNum = dstVRefNum;
  438.     pb.copyParam.ioNewDirID = dstDirID;
  439.     pb.copyParam.ioNewName = dstPathname;
  440.     pb.copyParam.ioCopyName = copyName;
  441.     return ( PBHCopyFileSync(&pb) );
  442. }
  443.  
  444. /*****************************************************************************/
  445.  
  446. pascal    OSErr    FSpCopyFile(const FSSpec *srcSpec,
  447.                             const FSSpec *dstSpec,
  448.                             StringPtr copyName)
  449. {
  450.     return ( HCopyFile(srcSpec->vRefNum, srcSpec->parID, srcSpec->name,
  451.                        dstSpec->vRefNum, dstSpec->parID,
  452.                        (StringPtr)dstSpec->name, copyName) );
  453. }
  454.  
  455. /*****************************************************************************/
  456.  
  457. pascal    OSErr    HMoveRename(short vRefNum,
  458.                             long srcDirID,
  459.                             ConstStr255Param srcName,
  460.                             long dstDirID,
  461.                             StringPtr dstpathName,
  462.                             StringPtr copyName)
  463. {
  464.     HParamBlockRec pb;
  465.  
  466.     pb.copyParam.ioVRefNum = vRefNum;
  467.     pb.copyParam.ioDirID = srcDirID;
  468.     pb.copyParam.ioNamePtr = (StringPtr)srcName;
  469.     pb.copyParam.ioNewDirID = dstDirID;
  470.     pb.copyParam.ioNewName = dstpathName;
  471.     pb.copyParam.ioCopyName = copyName;
  472.     return ( PBHMoveRenameSync(&pb) );
  473. }
  474.  
  475. /*****************************************************************************/
  476.  
  477. pascal    OSErr    FSpMoveRename(const FSSpec *srcSpec,
  478.                               const FSSpec *dstSpec,
  479.                               StringPtr copyName)
  480. {
  481.     /* make sure the FSSpecs refer to the same volume */
  482.     if ( srcSpec->vRefNum != dstSpec->vRefNum )
  483.         return ( diffVolErr );
  484.     return ( HMoveRename(srcSpec->vRefNum, srcSpec->parID, srcSpec->name, 
  485.                          dstSpec->parID, (StringPtr)dstSpec->name, copyName) );
  486. }
  487.  
  488. /*****************************************************************************/
  489.  
  490. pascal    OSErr    GetVolMountInfoSize(StringPtr volName,
  491.                                     short vRefNum,
  492.                                     short *size)
  493. {
  494.     ParamBlockRec pb;
  495.  
  496.     pb.ioParam.ioNamePtr = volName;
  497.     pb.ioParam.ioVRefNum = vRefNum;
  498.     pb.ioParam.ioBuffer = (Ptr)size;
  499.     return ( PBGetVolMountInfoSize(&pb) );
  500. }
  501.  
  502. /*****************************************************************************/
  503.  
  504. pascal    OSErr    GetVolMountInfo(StringPtr volName,
  505.                                 short vRefNum,
  506.                                 void *volMountInfo)
  507. {
  508.     ParamBlockRec pb;
  509.  
  510.     pb.ioParam.ioNamePtr = volName;
  511.     pb.ioParam.ioVRefNum = vRefNum;
  512.     pb.ioParam.ioBuffer = (Ptr)volMountInfo;
  513.     return ( PBGetVolMountInfo(&pb) );
  514. }
  515.  
  516. /*****************************************************************************/
  517.  
  518. pascal    OSErr    VolumeMount(void *volMountInfo,
  519.                             short *vRefNum)
  520. {
  521.     ParamBlockRec pb;
  522.     OSErr error;
  523.  
  524.     pb.ioParam.ioBuffer = (Ptr)volMountInfo;
  525.     error = PBVolumeMount(&pb);
  526.     *vRefNum = pb.ioParam.ioVRefNum;
  527.     return ( error );
  528. }
  529.  
  530. /*****************************************************************************/
  531.  
  532. pascal    OSErr    Share(short vRefNum,
  533.                       long dirID,
  534.                       StringPtr name)
  535. {
  536.     HParamBlockRec pb;
  537.  
  538.     pb.fileParam.ioNamePtr = name;
  539.     pb.fileParam.ioVRefNum = vRefNum;
  540.     pb.fileParam.ioDirID = dirID;
  541.     return ( PBShareSync(&pb) );
  542. }
  543.  
  544. /*****************************************************************************/
  545.  
  546. pascal    OSErr    FSpShare(const FSSpec *spec)
  547. {
  548.     return ( Share(spec->vRefNum, spec->parID, (StringPtr)spec->name) );
  549. }
  550.  
  551. /*****************************************************************************/
  552.  
  553. pascal    OSErr    Unshare(short vRefNum,
  554.                         long dirID,
  555.                         StringPtr name)
  556. {
  557.     HParamBlockRec pb;
  558.  
  559.     pb.fileParam.ioNamePtr = name;
  560.     pb.fileParam.ioVRefNum = vRefNum;
  561.     pb.fileParam.ioDirID = dirID;
  562.     return ( PBUnshareSync(&pb) );
  563. }
  564.  
  565. /*****************************************************************************/
  566.  
  567. pascal    OSErr    FSpUnshare(const FSSpec *spec)
  568. {
  569.     return ( Unshare(spec->vRefNum, spec->parID, (StringPtr)spec->name) );
  570. }
  571.  
  572. /*****************************************************************************/
  573.  
  574. pascal    OSErr    GetUGEntry(short objType,
  575.                            StringPtr objName,
  576.                            long *objID)
  577. {
  578.     HParamBlockRec pb;
  579.     OSErr error;
  580.  
  581.     pb.objParam.ioObjType = objType;
  582.     pb.objParam.ioObjNamePtr = objName;
  583.     pb.objParam.ioObjID = *objID;
  584.     error = PBGetUGEntrySync(&pb);
  585.     *objID = pb.objParam.ioObjID;
  586.     return ( error );
  587. }
  588.  
  589. /*****************************************************************************/
  590.